package cn.stylefeng.guns.modular.erlist.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.stylefeng.guns.core.exception.ServiceException;
import cn.stylefeng.guns.core.factory.PageFactory;
import cn.stylefeng.guns.core.pojo.page.PageResult;
import cn.stylefeng.guns.modular.erlist.entity.ErList;
import cn.stylefeng.guns.modular.erlist.mapper.ErListMapper;
import cn.stylefeng.guns.modular.erlist.model.param.ErListParam;
import cn.stylefeng.guns.modular.erlist.model.result.postArticle;
import cn.stylefeng.guns.modular.erlist.service.ErListService;
import cn.stylefeng.guns.modular.erlist.enums.ErListExceptionEnum;
import cn.stylefeng.guns.modular.erlove.service.ErLoveService;
import cn.stylefeng.guns.sys.modular.user.service.SysUserService;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.gson.annotations.Until;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * er_list 服务实现类
 *
 * @author w
 * @date 2021/06/12 15:52
 */
@Service
public class ErListServiceImpl extends ServiceImpl<ErListMapper, ErList> implements ErListService {


    @Override
    public PageResult<ErList> page(ErListParam erListParam) {

        // 根据 作者 或 标题 分页 条件查询
        LambdaQueryWrapper<ErList> queryWrapper = new LambdaQueryWrapper<>();
        if(ObjectUtil.isNotEmpty(erListParam)) {
            if (ObjectUtil.isNotNull(erListParam.getSearchValue())) {
                queryWrapper.and(q -> q.like(ErList::getAuthor,erListParam.getSearchValue())
                        .or().like(ErList::getTitle,erListParam.getSearchValue()));
            }
        }
        // 查询分页结果
        return new PageResult<>(this.page(PageFactory.defaultPage(), queryWrapper));
    }


    //    分类查询
    @Override
    public List<ErList> getListByClassify(ErListParam erListParam) {
        LambdaQueryWrapper<ErList> queryWrapper = new LambdaQueryWrapper<>();
        if(ObjectUtil.isNotEmpty(erListParam)) {
            if (ObjectUtil.isNotNull(erListParam.getSearchValue())) {
                queryWrapper.eq(ErList::getClassify, erListParam.getSearchValue());
            }
        }
        return  this.list(queryWrapper);
    }



    @Override
    public List<ErList> list(ErListParam erListParam) {

        // 构造条件
        LambdaQueryWrapper<ErList> queryWrapper = new LambdaQueryWrapper<>();

        return this.list(queryWrapper);
    }
    // 发表帖子
    @Override
    public ErList add(ErListParam erListParam) {

        // 将dto转为实体
        ErList erList = new ErList();
        BeanUtil.copyProperties(erListParam, erList);
        this.save(erList);
        postArticle article = this.baseMapper.post(erList.getCreateUser());
        System.out.println(article);
        erList.setPhoto(article.getAvatar()+"");
        erList.setAuthor(article.getNickName());
        this.updateById(erList);
        return erList;
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void delete(ErListParam erListParam) {
        this.removeById(erListParam.getId());
    }

    @Override
    public void edit(ErListParam erListParam) {

        // 根据id查询实体
        ErList erList = this.queryErList(erListParam);

        // 请求参数转化为实体
        BeanUtil.copyProperties(erListParam, erList);

        this.updateById(erList);
    }

    @Override
    public ErList detail(ErListParam erListParam) {
        return this.queryErList(erListParam);
    }


    /**
     * 根据id获取贴子
     *
     * @author w
     * @since 2021/06/12 15:52
     */
    public ErList queryErList(ErListParam erListParam) {
        ErList erList = this.getById(erListParam.getId());
        if (ObjectUtil.isEmpty(erList)) {
            throw new ServiceException(ErListExceptionEnum.NOT_EXISTED);
        }
        return erList;
    }
    //获取所有的点赞数
    @Override
    public int getAllLike(ErListParam erListParam) {

        int allLike = 0;
        if(ObjectUtil.isNotEmpty(erListParam))
            try {
                {
                    if(ObjectUtil.isNotNull(erListParam.getCreateUser())) {
                        allLike = this.baseMapper.getAllLike(erListParam.getCreateUser());
                    }
                }
            } catch (Exception e) {

            }finally {
                allLike = 0;
            }
        System.out.println(allLike);
        return allLike;
    }
    // 获取用户发表的帖子
    @Override
    public List<ErList> getMyArticle(ErListParam erListParam) {
        LambdaQueryWrapper<ErList> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(ErList::getCreateUser,erListParam.getCreateUser());
        List<ErList> lists = this.list(queryWrapper);
        return lists;
    }
}